package com.yidu.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.yidu.comment.Tools;
import com.yidu.dao.SnBomMapper;
import com.yidu.dao.SnComInDetailMapper;
import com.yidu.dao.SnComInventoryMapper;
import com.yidu.dao.SnCommodityMapper;
import com.yidu.dao.SnMaInDetailMapper;
import com.yidu.dao.SnMaInventoryMapper;
import com.yidu.dao.SnMaterialsMapper;
import com.yidu.dao.SnProDetailMapper;
import com.yidu.dao.SnProductionMapper;
import com.yidu.model.SnBom;
import com.yidu.model.SnCommodity;
import com.yidu.model.SnMaInDetail;
import com.yidu.model.SnMaInventory;
import com.yidu.model.SnMaterials;
import com.yidu.model.SnProDetail;
import com.yidu.model.SnProduction;
import com.yidu.service.SnProductionService;
/**
 * 生产计划实现类
 * @author chensituo
 * @date 2019年1月17日 上午8:45:52
 */
@Service
public class SnProductionServiceImpl implements SnProductionService{
	/**
	 * 注入生产计划mapper
	 */
	@Resource
	SnProductionMapper productionMapper;
	
	/**
	 * 注入生产详情mapper
	 */
	@Resource
	SnProDetailMapper proDetailMapper;
	
	/**
	 * 注入物料清单mapper
	 */
	@Resource
	SnBomMapper bomMapper;
	
	/**
	 * 注入材料库存mapper
	 */
	@Resource
	SnMaInventoryMapper inventoryMapper;
	/**
	 * 注入材料库存记录mapper
	 */
	@Resource
	SnMaInDetailMapper maInDetailMapper;
	/**
	 * 注入商品库存
	 */
	@Resource
	SnComInventoryMapper comInventoryMapper;
	
	/**
	 * 注入商品库存记录mapper
	 */
	@Resource
	SnComInDetailMapper comInDetailMapper;
	
	/**
	 * 注入商品mapper
	 */
	@Resource
	SnCommodityMapper commodityMapper;
	/**
	 * 注入材料mapper
	 */
	@Resource
	SnMaterialsMapper materialsMapper;
	
	@Override
	public List<SnProDetail> findAll(Map<String, Object> map) {
		//调用分页查询的方法
		return productionMapper.findAll(map);
	}

	@Override
	public SnProduction findById(String proId) {
		//调用根据id查询的方法
		return productionMapper.selectByPrimaryKey(proId);
	}

	@Override
	public int updateByPrimaryKeySelective(SnProduction production) {
		//调用修改的方法
		return productionMapper.updateByPrimaryKeySelective(production);
	}

	@Override
	public int addOrUpdate(SnProduction production) {
		int rows=0;
		//如果生产订单id不等于空 并且不等于空字符串
		if(production.getProId()!=null && !"".equals(production.getProId())) {
			//调用生产mapper修改的方法
			rows=productionMapper.updateByPrimaryKeySelective(production);
		}else {
			//将生产mpdel数据设置为有效
			production.setIsva(1);
			//将生产mpdel排序赋值
			production.setSort(Integer.valueOf(Tools.getTimeStamp()));
			//将生产mpdel生产id赋值
			production.setProId(Tools.getDateOrderNo());
			//调用生产mapper增加的方法
			rows=productionMapper.insertSelective(production);
		}
		return rows;
	}

	@Override
	public int findCount(Map<String, Object> maps) {
		//调用查询行数的方法
		return productionMapper.findCount(maps);
	}

	@Override
	public int updateState(String proId, String state) {
		//调用生产mapper根据生产id查询的方法
		SnProduction production=productionMapper.selectByPrimaryKey(proId);
		//将生产model状态赋值
		production.setProState(Integer.valueOf(state));
		//调用生产mapper修改的方法
		int three=productionMapper.updateByPrimaryKeySelective(production);
		//根据生产id查询生产详情 得到详情集合
		List<SnProDetail> listdetail=proDetailMapper.findProId(proId);
		
		
		int one=0;
		int four=0;
		//遍历生产 详情集合
		for (SnProDetail snProDetail : listdetail) {
			//根据商品id查询商品mapper 得到商品model
			SnCommodity commodity=commodityMapper.selectByPrimaryKey(snProDetail.getComId());
			
			
			//减少材料库存
			//根据商品id查询物料清单mapper 得到物料清单集合
			List<SnBom> listBom=bomMapper.selectComId(snProDetail.getComId().toString());
			//遍历物料清单集合
			for (SnBom snBom : listBom) {
				//调用材料mapper根据材料id查询的方法 得到材料model
				SnMaterials materials=materialsMapper.selectByPrimaryKey(snBom.getMaId());
				//根据材料id查询材料库存mapper的方法
				SnMaInventory inventory=inventoryMapper.selectMaBraId(snBom.getMaId());
				//将材料库存减去生产商品需要的库存
				inventory.setInNumber(inventory.getInNumber()-(snBom.getBomNumber()*snProDetail.getDeNumber()));
				//调用材料库存mapper修改的方法
				one=inventoryMapper.updateByPrimaryKeySelective(inventory);
				//创建材料库存记录对象
				SnMaInDetail maDetail=new SnMaInDetail();
				//将材料库存记录model排序赋值
				maDetail.setSort(Integer.valueOf(Tools.getTimeStamp()));
				//将材料库存记录model库存id赋值
				maDetail.setInId(inventory.getInId());
				//将材料库存记录model记录id赋值
				maDetail.setMidId(Tools.getDateOrderNo());
				//将材料库存记录model支出记录赋值
				maDetail.setMidExplain("生产"+commodity.getComName()+"减少"+materials.getMaName()+"库存"+snBom.getBomNumber()*snProDetail.getDeNumber()+inventory.getInUnit());
				//将材料库存记录model操作时间赋值
				maDetail.setOptime(Tools.getCurDateTime());
				//将材料库存记录model是否有效赋值
				maDetail.setIsva(1);
				//调用材料库存mapper增加的方法
				four=maInDetailMapper.insertSelective(maDetail);
			}
			
		}
		if(one==1 &&  three==1 && four==1) {
			return 1;
		}else {
			return 0;
		}
		
	}
	
	@Override
	public int updateStates(String proId, String state) {
		//调用根据id查询的方法
		SnProduction production=productionMapper.selectByPrimaryKey(proId);
		//将状态赋值
		production.setProState(Integer.valueOf(state));
		//调用生产mapper修改的方法
		return productionMapper.updateByPrimaryKeySelective(production);
	}

}
